package cn.flying.cloud.base.common.utils.crypto;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Java jdk 原生 Aes 加解密
 * Advanced Encrytion Standard（高级加密标准），特点1. 对称加密  2. 一个 SECRET_KEY（密钥）扩展成多个子 SK，轮加密
 *
 * @author: admin
 * @date: 2025年01月23日 09:41
 * @version: 1.0
 */
public class AESUtil {
    private static final Logger logger = LoggerFactory.getLogger(AESUtil.class);

    private static final String ALGORITHM = "AES";
    private static final String ALGORITHM_PKCS5PADDING = "AES/ECB/PKCS5Padding";
    //    private static final String CIPHER_TRANSFORMS = "AES/CBC/PKCS5Padding";
    // keySize must be equal to 128, 192 or 256
    private static final int KEY_SIZE = 256;


    /**
     * 生成密钥文本
     *
     * @param keySeed 用于生成密钥的内容，可以任意随机
     * @return 返回密钥文本
     * @throws Exception
     */
    public static String generateKey(String keySeed) throws Exception {
        return CipherUtils.generateKey(keySeed, ALGORITHM, KEY_SIZE);
    }

    /**
     * AES 加密
     *
     * @param data   被加密的内容文本
     * @param secret 密钥文本
     * @return 加密后的内容(base64)
     * @throws Exception
     */
    public static String encrypt(String data, String secret) throws Exception {
        return CipherUtils.encrypt(data, secret, ALGORITHM, ALGORITHM_PKCS5PADDING);
    }

    /**
     * AES 解密
     *
     * @param cipherText 密文(base64)
     * @param secret     密钥
     * @return 解密好的内容
     * @throws Exception
     */
    public static String decrypt(String cipherText, String secret) throws Exception {
        return CipherUtils.decrypt(cipherText, secret, ALGORITHM, ALGORITHM_PKCS5PADDING);
    }


//    public static void main(String[] args) throws Exception {
//        String data = "AES: Advanced Encrytion Standard（高级加密标准），特点1. 对称加密  2. 一个 SECRET_KEY（密钥）扩展成多个子 SK，轮加密";
//        String keySrc = "e27568c9-658c-49ea-b178-1437fce69046";
//
//        String secret = AesUtil.generateKey(keySrc);
//        // 密钥文本-> SMtnONQhBBRiDWRS4GHn0z7mX9DFMl3LWexekXf9pRo=
//        System.err.println("密钥文本-> " + secret);
//
//        String cipherText = AesUtil.encrypt(data, secret);
//        // 密文-> 1IcOOi55CzrYnKZq1pD10r4Rl26ltgJ95uQ0HMh56V7EL5I8eRLnj8s6lZvxcVMPc8XrfDHZB/298t3J05WWlAsplKawAjaaf+7SMaAewV2EAb+jC05oc9Xk02VXzp395SGQVHL+3scSlhMkvXxtEwX9n7hrXs24wCTScAiFjxkQmQkKqSkQQ4Hn2SWvoD57HJsxO0ZLxbWWfxm6RJTLSw==
//        System.out.println("密文-> " + cipherText);
//
//        String deStr = AesUtil.decrypt(cipherText, secret);
//        System.out.println("明文-> " + deStr);
//    }

}